www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\ScreenView.cpp

    //Download by http://www.NewXing.com
// ScreenView.cpp : implementation file
//

#include "stdafx.h"
#include "peeryouc.h"
#include "ScreenView.h"
#include "mainfrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CScreenView

IMPLEMENT_DYNCREATE(CScreenView, CView)

CScreenView::CScreenView()
{
	ifstart=false;
	src=0;
	des=0;
}

CScreenView::~CScreenView()
{
	if(ifstart)
	{
	if(src)
		delete []src;
	if(des)
		delete []des;
	closesocket(s);
	WSACloseEvent(hEvent);
	closesocket(s1);
	WSACloseEvent(hEvent1);
	}
}


BEGIN_MESSAGE_MAP(CScreenView, CView)
	//{{AFX_MSG_MAP(CScreenView)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_RBUTTONDBLCLK()
	ON_WM_RBUTTONDOWN()
	ON_WM_RBUTTONUP()
	ON_WM_TIMER()
	ON_WM_KEYDOWN()
	ON_WM_KEYUP()
	ON_WM_MBUTTONDBLCLK()
	ON_WM_MBUTTONDOWN()
	ON_WM_MBUTTONUP()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScreenView drawing

void CScreenView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	if(!ifstart)
		return;
	// TODO: add draw code here
//	CDC* pDC;
	CRect rect;
	GetClientRect(&rect);
//	pDC=GetDC();
	HDC hdc=pDC->GetSafeHdc();

	StretchDIBits(hdc,
                         // destination rectangle
                         0, 0, rect.Width(), rect.Height(),
                         // source rectangle
                         0, 0, screen.BmpCX, screen.BmpCY,
                         src+screen.BmpInfoSize,
                         (BITMAPINFO*)src,
                         DIB_RGB_COLORS,
                         SRCCOPY);
}

/////////////////////////////////////////////////////////////////////////////
// CScreenView diagnostics

#ifdef _DEBUG
void CScreenView::AssertValid() const
{
	CView::AssertValid();
}

void CScreenView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CScreenView message handlers
#define PEER_MOUSE_LEFTDOWN		2
#define PEER_MOUSE_LEFTUP		3
#define PEER_MOUSE_RIGHTDOWN	4
#define PEER_MOUSE_RIGHTUP		5
#define PEER_MOUSE_MIDDLEDOWN	6
#define PEER_MOUSE_MIDDLEUP		7
#define PEER_MOUSE_LDBCLICK		8
#define PEER_MOUSE_RDBCLICK		9
#define PEER_MOUSE_MDBCLICK		10
#define PEER_MOUSE_MOVE			11
//////////////////////////////////
#define PEER_KEY_DOWN			12
#define PEER_KEY_UP				13
void CScreenView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_MOVE;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	
	//CView::OnMouseMove(nFlags, point);
}

void CScreenView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_LDBCLICK;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnLButtonDblClk(nFlags, point);
}

void CScreenView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_LEFTDOWN;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnLButtonDown(nFlags, point);
}

void CScreenView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_LEFTUP;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnLButtonUp(nFlags, point);
}

void CScreenView::OnRButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_RDBCLICK;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);	
	//CView::OnRButtonDblClk(nFlags, point);
}

void CScreenView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_RIGHTDOWN;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnRButtonDown(nFlags, point);
}

void CScreenView::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_MOUSE_RIGHTUP;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnRButtonUp(nFlags, point);
}

void CScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if(nChar==VK_ESCAPE)
	{
		if(ifstart)
		KillTimer(1);
		CMainFrame *pMain=(CMainFrame*)AfxGetApp()->GetMainWnd();
		::SendMessage(pMain->GetSafeHwnd(),FULLSCREEN,0,0);
		if(ifstart)
		SetTimer(1,1000,NULL);
		return;
	}
	if(!ifstart)
		return;
	keymouse.style=PEER_KEY_DOWN;
	keymouse.nkey=nChar;
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
//VK_LSHIFT
	//CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CScreenView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.style=PEER_KEY_UP;
	keymouse.nkey=nChar;
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnKeyUp(nChar, nRepCnt, nFlags);
}

void CScreenView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

	//////////屏幕///////////
	if(ifstart==0)
		screen.BmpSize=10000;
	else
		screen.BmpSize=0;

	if(!PeerSendDataS(s1,(char*)&screen,sizeof(screen),&retLen1,
					  hEvent1))
	{
		return ;
	}
	if(!PeerRecvDataS(s1,(char*)&screen,sizeof(screen),&retLen1,
					  hEvent1))
	{
		return ;
	}
	if(!PeerRecvDataS(s1,(char*)src,screen.BmpSize,&retLen1,
					  hEvent1))
	{
		return ;
	}
	Invalidate();

	//CView::OnTimer(nIDEvent);
}

void CScreenView::OnMButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.ctrl=PEER_MOUSE_MDBCLICK;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnMButtonDblClk(nFlags, point);
}

void CScreenView::OnMButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.ctrl=PEER_MOUSE_MIDDLEDOWN;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnMButtonDown(nFlags, point);
}

void CScreenView::OnMButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(!ifstart)
		return;
	keymouse.ctrl=PEER_MOUSE_MIDDLEUP;
	float fx,fy;
	CRect rect;
	GetClientRect(&rect);
	fx=(float)point.x/rect.Width();
	fy=(float)point.y/rect.Height();
	keymouse.x=65535*fx;
	keymouse.y=65535*fy;	
	PeerSendDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen,
					  hEvent);
	//CView::OnMButtonUp(nFlags, point);
}

BOOL CScreenView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	return true;
	//return CView::OnEraseBkgnd(pDC);
}